/*
 Автор: Швейкин Евгений Юрьевич
 Функциональное описание:     
    Модуль предназначен для формирования дополнительного сигнала сброса
*/
//--------------------------------------------------------------------------------------------------
`timescale 1ns / 10ps

//    ********************** НАЧАЛО МОДУЛЯ *********************************************************
module mod_dig_reset
    #(  parameter integer freq_p        = 10000000,
        parameter integer length_ms_p   = 1000    
    )
    (   input logic         clk,
        input logic         pll_locked,
        
        output logic        reset
    );

//  ********************* КОНСТАНТЫ ****************************************************************
    localparam longint      length_tact_lp  = length_ms_p * freq_p / 1000;
    
//  ********************* ТИПЫ ДАННЫХ **************************************************************

//  ********************* ПЕРЕМЕННЫЕ ***************************************************************
    integer wdt_cnt;
    
//  ********************* ASSIGN *******************************************************************

// ********************* ПРОЦЕССЫ ******************************************************************


    always_ff @(posedge clk)
    begin
        // Держим ресет, пока частота не захвачена
        if (!pll_locked) begin
            wdt_cnt <= 32'h0;
            reset   <= 1'b1;
        end
        else begin
            reset   <= 1'b0;
            // Пока сторожевой таймер не досчитал, будем ресетить и считать
            if (wdt_cnt < length_tact_lp[31:0]) begin
                wdt_cnt <= wdt_cnt + 32'h1;
                reset   <= 1'b1;
            end
            else;
        end
    end
endmodule